//package org.xqp.quartz.util;
//import org.apache.commons.lang3.StringUtils;
//import org.quartz.JobDataMap;
//import org.quartz.JobDetail;
//import org.quartz.JobKey;
//import org.quartz.TriggerKey;
//import java.util.Calendar;
//import java.util.Date;
//import org.quartz.*;
//import static org.quartz.CronScheduleBuilder.cronSchedule;
//import static org.quartz.JobBuilder.newJob;
//import static org.quartz.TriggerBuilder.newTrigger;
//public class QuartzUtil {
//
//    //定时任务的JOB的组名
//    public static final String JOB_GROUP_NAME = "JOB_GROUP_NAME";
//    //定时任务的trigger的组名
//    public static final String TRIGGER_GROUP_NAME = "TRIGGER_GROUP_NAME";
//
//    //把时间变成时间表达式，在 fireDate 时间到的时候执行
//    public static String getCron(Date fireDate) {
//        String[] cronArr = new String[7];
//        for (int i = 0; i < cronArr.length; i++) {
//            cronArr[i] = "";
//        }
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTime(fireDate);
//        int second = calendar.get(Calendar.SECOND);
//        int minute = calendar.get(Calendar.MINUTE);
//        int hour = calendar.get(Calendar.HOUR_OF_DAY);
//        int day = calendar.get(Calendar.DAY_OF_MONTH);
//        int month = calendar.get(Calendar.MONTH) + 1;
//        int year = calendar.get(Calendar.YEAR);
//
//        cronArr[0] = second + "";
//        cronArr[1] = minute + "";
//        cronArr[2] = hour + "";
//
//        cronArr[3] = day + "";
//        cronArr[4] = month + "";
//        cronArr[5] = "?";
//        cronArr[6] = year + "";
//        //把数组，编程字符串，以 "2 * * * " 分割
//        return StringUtils.join(cronArr," ").trim();
//    }
//
//    /**
//     * 添加定时任务
//     * @param sched  : 定时任务的最大的容器
//     * @param jobName ： job的名字
//     * @param cls
//     * @param params
//     * @param excuteTime
//     */
//    public static void addJob(Scheduler sched, String jobName,Class cls, Object params, Date excuteTime) {
//        addJob(sched,jobName,cls,params,getCron(excuteTime));
//    }
//
//    /**
//     * @Description: 添加一个定时任务，使用默认的任务组名，触发器名，触发器组名
//     * @param sched
//     *            调度器容器
//     * @param jobName
//     *            任务名
//     * @param cls
//     *            任务,一个实现了Job类的class
//     * @param params
//     *            任务参数
//     * @param time
//     *            时间表达式，时间设置，参考quartz说明文档
//     *
//     * @Title: QuartzManager.java
//     */
//    public static void addJob(Scheduler sched, String jobName,Class cls, Object params, String time) {
//        try {
//            /**=====================================创建JobDetail 工作详情=====================================**/
//
//            //JOB 的键 ，相当于是一个job的ID
//            JobKey jobKey = new JobKey(jobName, JOB_GROUP_NAME);// 任务名，任务组，任务执行类
//            //Job的数据map
//            JobDataMap jobDataMap = new JobDataMap();
//            //把数据设置到map中，后续传给job
//            jobDataMap.put("params", params);
//            //根据传入的job的类，创建一个JobDetail，并制定 Job key ，并把数据map设置给job
//            JobDetail jobDetail = newJob(cls).withIdentity(jobKey).setJobData(jobDataMap).build();
//
//            /**=====================================创建Trigger触发器=====================================**/
//            //创建触发器的key 相当于是触发器的ID
//            TriggerKey triggerKey = new TriggerKey(jobName, TRIGGER_GROUP_NAME);// 触发器
//            //创建触发器 ， 设置触发器的key , 并关联一个  cronSchedule(基于表达式的时间规则)
//            Trigger trigger = newTrigger().withIdentity(triggerKey).withSchedule(cronSchedule(time)).build();// 触发器时间设定
//            //把工作详情和调度器设置到 Scheduler调度容器
//            sched.scheduleJob(jobDetail, trigger);
//            // 启动
//            if (!sched.isShutdown()) {
//                sched.start();
//            }
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @Description: 添加一个定时任务
//     *
//     * @param sched
//     *            调度器
//     *
//     * @param jobName
//     *            任务名
//     * @param jobGroupName
//     *            任务组名
//     * @param triggerName
//     *            触发器名
//     * @param triggerGroupName
//     *            触发器组名
//     * @param jobClass
//     *            任务
//     * @param params
//     *            任务参数
//     * @param time
//     *            时间设置，参考quartz说明文档
//     *
//     * @Title: QuartzManager.java
//     */
//    public static void addJob(Scheduler sched, String jobName, String jobGroupName, String triggerName,
//                              String triggerGroupName, @SuppressWarnings("rawtypes") Class jobClass,  Object params, String time) {
//        try {
//            JobKey jobKey = new JobKey(jobName, jobGroupName);
//            JobDataMap jobDataMap = new JobDataMap();
//            jobDataMap.put("params", params);
//            @SuppressWarnings("unchecked")
//            JobDetail jobDetail = newJob(jobClass).withIdentity(jobKey).setJobData(jobDataMap).build();
//            // 触发器
//            TriggerKey triggerKey = new TriggerKey(triggerName, triggerGroupName);
//            Trigger trigger = newTrigger().withIdentity(triggerKey).withSchedule(cronSchedule(time)).build();
//            sched.scheduleJob(jobDetail, trigger);
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @Description: 修改一个任务的触发时间(使用默认的任务组名，触发器名，触发器组名)
//     *
//     * @param sched
//     *            调度器
//     * @param jobName
//     * @param time
//     *
//     * @Title: QuartzManager.java
//     */
//    @SuppressWarnings("rawtypes")
//    public static void modifyJobTime(Scheduler sched, String jobName, String time) {
//        try {
//            TriggerKey triggerKey = new TriggerKey(jobName, TRIGGER_GROUP_NAME);
//            CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
//            if (trigger == null) {
//                return;
//            }
//            String oldTime = trigger.getCronExpression();
//            if (!oldTime.equalsIgnoreCase(time)) {
//                JobKey jobKey = new JobKey(jobName, JOB_GROUP_NAME);
//                JobDetail jobDetail = sched.getJobDetail(jobKey);
//                Class objJobClass = jobDetail.getJobClass();
//                Object params = jobDetail.getJobDataMap().get("params");
//                removeJob(sched, jobName);
//                System.out.println("修改任务：" + jobName);
//                addJob(sched, jobName, objJobClass, params,time);
//            }
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @Description: 修改一个任务的触发时间
//     *
//     * @param sched
//     *            调度器 *
//     * @param sched
//     *            调度器
//     * @param triggerName
//     * @param triggerGroupName
//     * @param time
//     *
//     * @Title: QuartzManager.java
//     */
//    public static void modifyJobTime(Scheduler sched, String triggerName, String triggerGroupName, String time) {
//        try {
//            TriggerKey triggerKey = new TriggerKey(triggerName, triggerGroupName);
//            CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
//            if (trigger == null) {
//                return;
//            }
//            String oldTime = trigger.getCronExpression();
//            if (!oldTime.equalsIgnoreCase(time)) {
//                // 修改时间
//                trigger.getTriggerBuilder().withSchedule(cronSchedule(time));
//                // 重启触发器
//                sched.resumeTrigger(triggerKey);
//            }
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @Description: 移除一个任务(使用默认的任务组名，触发器名，触发器组名)
//     *
//     * @param sched
//     *            调度器
//     * @param jobName
//     *
//     * @Title: QuartzManager.java
//     */
//    public static void removeJob(Scheduler sched, String jobName) {
//        try {
//            TriggerKey triggerKey = new TriggerKey(jobName, TRIGGER_GROUP_NAME);
//            sched.pauseTrigger(triggerKey);// 停止触发器
//            sched.unscheduleJob(triggerKey);// 移除触发器
//            JobKey jobKey = new JobKey(jobName, JOB_GROUP_NAME);
//            boolean b = sched.deleteJob(jobKey);// 删除任务
//            System.out.println(b);
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @Description: 移除一个任务
//     *
//     * @param sched
//     *            调度器
//     * @param jobName
//     * @param jobGroupName
//     * @param triggerName
//     * @param triggerGroupName
//     *
//     * @Title: QuartzManager.java
//     */
//    public static void removeJob(Scheduler sched, String jobName, String jobGroupName, String triggerName,
//                                 String triggerGroupName) {
//        try {
//            TriggerKey triggerKey = new TriggerKey(triggerName, triggerGroupName);
//            sched.pauseTrigger(triggerKey);// 停止触发器
//            sched.unscheduleJob(triggerKey);// 移除触发器
//            JobKey jobKey = new JobKey(jobName, jobGroupName);
//            sched.deleteJob(jobKey);// 删除任务
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @Description:启动所有定时任务
//     *
//     * @param sched  调度器
//     *
//     * @Title: QuartzManager.java
//     */
//    public static void startJobs(Scheduler sched) {
//        try {
//            sched.start();
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    /**
//     * @Description:关闭所有定时任务
//     *
//     * @param sched
//     *            调度器
//     *
//     */
//    public static void shutdownJobs(Scheduler sched) {
//        try {
//            if (!sched.isShutdown()) {
//                sched.shutdown();
//            }
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//}